<?php
namespace Admin\Model;
use Think\Model;
class AdminModel extends Model
{
	protected $insertFields = array('username','password','cpassword','chkcode');
	protected $updateFields = array('id','username','password');
	protected $_validate = array(
		array('username', 'require', '用户名不能为空！', 2, 'regex', 3),
		array('username', '1,30', '的值最长不能超过 30 个字符！', 2, 'length', 3),
		array('password', 'require', '密码不能为空！', 2, 'regex', 3),
		array('cpassword', 'password', '俩次密码必须一致！', 2, 'confirm', 3),
		array('username', '', '该用户已存在，请重新注册！', 2, 'unique', 3),
		array('chkcode', 'require', '验证码不能为空！', 1),
		array('chkcode', 'check_verify', '验证码不正确！', 1, 'callback'),
	);

//	为登录表单定义一个验证规则
    public $_login_validate=array(
        array('username', 'require', '用户名不能为空！', 1),
        array('password', 'require', '密码不能为空！', 1),
        array('chkcode', 'require', '验证码不能为空！', 1),
        array('chkcode', 'check_verify', '验证码不正确！', 1, 'callback'),

    );
	//判断验证码是否正确

	function check_verify($code, $id = ''){
		$verify = new \Think\Verify();
		return $verify->check($code, $id);
	}
	/********************在模型中添加login方法************************************/
	public function login(){
		$username = $this->username;
		$password = $this->password;
		//先查询这个用户名是否存在
		$user = $this->where(array(
			'username'=>array('eq',$username),
		))->find();
		if($user){
			if($user['password'] == md5($password)){

				//登录成功保存session
				session('id',$user['id']);
				session('username',$user['username']);
				return TRUE;
			}else{
				$this->error = '密码不正确！';
				return FALSE;
			}
		}else{
			$this->error = '用户名不存在！';
			return FALSE;
		}
	}

	/****************************************退出登录********************************************************************/
	public function logout(){
		session(null);
	}


	public function search($pageSize = 20)
	{
		/**************************************** 搜索 ****************************************/
		$where = array();
		if($username = I('get.username'))
			$where['username'] = array('like', "%$username%");
		/************************************* 翻页 ****************************************/
		$count = $this->alias('a')->where($where)->count();
		$page = new \Think\Page($count, $pageSize);
		// 配置翻页的样式
		$page->setConfig('prev', '上一页');
		$page->setConfig('next', '下一页');
		$data['page'] = $page->show();
		/************************************** 取数据 ******************************************/
		$data['data'] = $this->alias('a')
			->field('a.*,GROUP_CONCAT(c.role_name) role_name')
			->join('LEFT JOIN __ADMIN_ROLE__ b ON a.id=b.admin_id
                    LEFT JOIN __ROLE__ c ON b.role_id=c.id')
			->where($where)
			->group('a.id')
			->limit($page->firstRow.','.$page->listRows)
			->select();
		return $data;
	}
	// 添加前
	protected function _before_insert(&$data, $option)
	{$data['password'] = md5($data['password']);
	}

	// 添加后
	protected function _after_insert(&$data, $option)
	{
		$roleid =I('post.role_id');               //这里是角色的id
		$arModel = D('admin_role');                //实例化权限角色中间表
		foreach($roleid as $v){
			$arModel->add(array(
				'role_id'=>$v,                      //权限id 就是获取到表单里的id
				'admin_id'=>$data['id'],          //角色id 就是在角色添加之后获取到的id
			));
		}
	}

	// 修改前
	protected function _before_update(&$data, $option)
	{
		/************更新之前先删除数据库的信息***************/
		$roleid =I('post.role_id');               //这里是角色的id
		$arModel = D('admin_role');                //实例化权限角色中间表
		$arModel->where(array(
			'admin_id'=>$option['where']['id'],
		))->delete();
		foreach($roleid as $v){
			$arModel->add(array(
				'role_id'=>$v,                      //权限id 就是获取到表单里的id
				'admin_id'=>$option['where']['id'],          //角色id 就是在角色添加之后获取到的id
			));
		}

		if($data['password']){
			$data['password'] = md5($data['password']);
		}else{
			unset($data['password']);//在修改之前从表单里删除这个字段 就不会修改这个字段了
		}

	}
	// 删除前
	protected function _before_delete($option)
	{
		if($option['where']['id']==1)
		{
			$this->error = '超级管理员无法被删除！';
			return FALSE;
		}

		//删除管理员的时候先把角色和管理员表（中间表）的数据删除
		$arModel = D('admin_role');
		$arModel->where(array(
			'admin_id'=>array('eq',$option['where']['id']),
		))->delete();
	}
	/************************************ 其他方法 ********************************************/
}




